//
//  WBHomeViewController.swift
//  WeiBo
//
//  Created by 韩菲菲 on 16/8/9.
//  Copyright © 2016年 韩菲菲. All rights reserved.
//

import UIKit

class WBHomeViewController: WBVisitorViewController {
    
    //创建一个viewmodel属性
    lazy var statusViewModel: WBStatusListViewModel = WBStatusListViewModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !isLogin{
            
            //没有登录的时候显示这个界面
            visitorView?.setupVisitorViewInfo(nil, title: nil)
            
            return
        }
        //登录了以后显示tableView
        setupUI()
        setupTableView()
        //请求数据
        loadData()
        
        //添加接收通知
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(WBHomeViewController.updateTableViewDataSource), name: "updateTableView", object: nil)
        
    }
    
    func updateTableViewDataSource() {
        //请求数据
        loadData()
        
        tableView.setContentOffset(CGPointMake(0, -64), animated: true)
    }
    
    deinit{
    
        NSNotificationCenter.defaultCenter().removeObserver(self)
    
    }
    
    // MARK: - 设置UI
    func setupUI() {
        
        navigationController!.view.insertSubview(pullDownTipLabel, belowSubview: navigationController!.navigationBar)
        
    }
    
    //设置和tableView相关的信息
    func setupTableView() {
        
        //注册一个cell类
        tableView.registerClass(WBStatusCell.self, forCellReuseIdentifier: "cell")
        
        //设置tableView的代理为当前控制器
        tableView.dataSource = self
        tableView.delegate = self
        
        //自动设置行高
        //tableView.rowHeight = 300
        
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 200
        
        //设置footview
        tableView.tableFooterView = activityView
        
        //添加下拉刷新控件的监听事件
        refresh.addTarget(self, action: #selector(WBHomeViewController.refreshNewSinaData), forControlEvents: .ValueChanged)
        
        //添加下拉刷新控件
        tableView.addSubview(refresh)
        
        //取消cell间的线条
        tableView.separatorStyle = .None
        
    }
    
    func refreshNewSinaData() {
        
        print("下拉刷新数据请求")
        
        loadData()
        
    }
    
    //懒加载显示信息的label
    private lazy var pullDownTipLabel: UILabel = {
    
        let label = UILabel(textColor: UIColor.whiteColor(), textSize: 15)
        
        label.frame = CGRect(x: 0, y: 34, width: ScreenW, height: 30)
        
        label.backgroundColor = AppColor
        
        label.textAlignment = .Center
        
        label.hidden = true
    
        return label
    
    }()
    
    
    //懒加载下拉刷新控件 
    private lazy var refresh:WBRefreshControl = WBRefreshControl()
    
    //懒加载控件 下拉刷新菊花
    private lazy var activityView: UIActivityIndicatorView = {
        //创建菊花控件
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        //设置菊花颜色
        view.color = AppColor
        
        return view
    }()
    
}


//数据源方法实现
extension WBHomeViewController:UITableViewDataSource,UITableViewDelegate{
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return statusViewModel.dataArray.count
        
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
        -> UITableViewCell {
            //自定义cell
            let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! WBStatusCell
            
            //给cell传递数据
            cell.statusViewModel = statusViewModel.dataArray[indexPath.row]
            
            return cell
    }
    
    //将要显示哪一个cell
    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        //判断将要出来的行数 和 数组的长度的关系
        if indexPath.row + 1 == statusViewModel.dataArray.count && !activityView.isAnimating(){
            
            //滑到最后一行了
            //菊花转动
            activityView.startAnimating()
            print("请求数据")
            //这个时候就要去请求数据了
            loadData()
        }
    }
}

//请求数据的分类
extension WBHomeViewController{
    
    //请求数据
    func loadData() {
        
        statusViewModel.loadHomeData(activityView.isAnimating()) { (isSuccess, count) in
            
            
            
            if !isSuccess{
                //请求失败
                print("请求失败了")
                
                return
            }else{
                
                //设置动画
                self.pullDownTipLabelAnimation(count)
            
            }
            
            
            //刷新数据源
            self.tableView.reloadData()
            
            //结束动画
            self.endAnimatingAndRefreshing()
        }
        
    }
    
    func pullDownTipLabelAnimation(count: Int) {
        
        var str = ""
        
        if activityView.isAnimating() {
        
            return
        
        }
        
        if self.pullDownTipLabel.hidden == false{
        
            return
        
        }
        
        
        if count == 0 {
        
            str = "已经是最新的微博了"
        
        }else{
            
            str = "更新了\(count)条数据"
        }
        
        //赋值
        self.pullDownTipLabel.text = str
        
        //显示控件
        self.pullDownTipLabel.hidden = false
        
        //设置动画
        UIView.animateWithDuration(0.5, animations: {
            
            //下来
            self.pullDownTipLabel.transform = CGAffineTransformMakeTranslation(0, 30)
            
            
            
            }) { (_) in
                
                UIView.animateWithDuration(0.5, delay: 2, options: [], animations: {
                    
                    //回去
                    self.pullDownTipLabel.transform = CGAffineTransformIdentity
                    
                    }, completion: { (_) in
                        
                        self.pullDownTipLabel.hidden = true
                        
                })
                
                
                
        }
        
    }
    
    
    func endAnimatingAndRefreshing() {
        
        //结束动画
        self.activityView.stopAnimating()
        //结束刷新菊花
        self.refresh.endRefreshing()
        
    }
}


